package com.crm.service.productManager;

import com.crm.model.entity.productManager.CustomerProduct;
import com.crm.model.qo.productManager.CustomerProductQO;
import com.crm.model.qo.productManager.CustomerProductUpdateQO;
import com.crm.model.vo.orderManager.FinanceIndexOrderProductVO;
import com.crm.model.vo.productManager.CustomerProductVO;
import com.crm.model.vo.productManager.ProductVO;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author yincuimei
 * @Date 2021/1/27 15:21
 * 产品管理
 */
public interface CustomerProductDbService {

    /**
     * 产品管理--产品列表
     * @param customerProductQO  ---产品列表查询参数
     * @param orderStr           ---产品列表排序字段及规则
     * @return
     */
    List<CustomerProductVO> selectCustomerProductVOList(CustomerProductQO customerProductQO, String orderStr);

    /**
     * 优惠券页面，为了和会员产品在同一列表展示，统一使用会员产品字段名
     * @param customerProductQO
     * @param orderStr
     * @return
     */
    List<Map<String,Object>> selectCustomerProductVOListForCoupon(CustomerProductQO customerProductQO, String orderStr);

    /**
     * 产品管理--根据产品ID和删除状态查询产品信息(产品编辑)
     * @param customerProductId  ---产品ID
     * @param deleteStatus       ---删除状态
     * @return
     */
    CustomerProduct selectCustomerProductById(String customerProductId,short deleteStatus);

    /**
     * 产品管理--产品列表(上/下架操作)
     * @param customerProduct
     * @return
     */
    Boolean updateCustomerProductShelfStatus(CustomerProduct customerProduct);

    /**
     * 产品管理--编辑产品
     * @param customerProductUpdateQO ---产品编辑信息
     * @return
     */
    Boolean updateCustomerProductById(CustomerProductUpdateQO customerProductUpdateQO);

    /**
     * 产品管理--查询产品名称是否已存在
     * @param productName
     * @param deleteStatus
     * @return
     */
    Boolean isExistProductName(String productName,short deleteStatus);

    /**
     * 产品管理--查询产品编码是否已存在
     * @param productCode   ---产品编码
     * @param deleteStatus  ---删除状态
     * @return
     */
    Boolean isExistProductCode(String productCode,short deleteStatus);

    /**
     * 产品管理--查询专题ID是否已存在
     * @param topicId       ---专题ID
     * @param deleteStatus  ---删除状态
     * @return
     */
    Boolean isExistTopicId(Integer topicId,short deleteStatus);

    /**
     * 产品管理--新增产品
     * @param customerProduct  ---产品信息
     * @return
     */
    Boolean insertCustomerProduct(CustomerProduct customerProduct);

    /**
     * 查询产品下拉框列表
     * @return
     */
    List<CustomerProduct> selectProductDropDownList(String productName);

    /**
     * 根据产品id获取产品信息
     * @param productId
     * @return
     */
    CustomerProduct selectCustomerProductByProductId(String productId);

    /**
     * 商机-新增商机-查询所有产品列表
     * @param productName 产品名称
     * @param order 分组
     * @return
     */
    List<CustomerProduct> productList(String productName,String order,String productCategories);

    /***
     * @Description:查询所有产品列表（非会员产品表和会员产品表）
     * @Param:产品名称
     * @Author: luojie
     * @Date: 2021/5/7 11:29
     */
    List<HashMap> selectALLProductDropDownList(String productName);

    /***
     * @Description:查询没添加的会员课程产品
     * @Param: productName 产品名称
     * @Param: memberProductRelationId 会员产品关系id
     * @Author: luojie
     * @Date: 2021/5/13 9:22
     */
    List<CustomerProductVO> selectNotAddCustomerMemberProductCourse(String productName,String memberProductRelationId);

    /**
     * 根据产品名称或者产品编码查询产品信息
     * @Author pym
     * @Date  2021/6/3 16:34
     * @param productName 产品名称
     * @param productCode 产品编码
     * @return {@link {com.crm.model.entity.productManager.CustomerProduct}}
     */
    CustomerProduct selectCustomerProductByNameOrCode(String productName, String productCode);

    /**
     * 根据专题id查询产品信息
     * @Author pym
     * @Date  2021/7/29 14:59
     * @param topicId 专题id
     * @return {@link {com.crm.model.entity.productManager.CustomerProduct}}
     */
    CustomerProduct selectCustomerProductByTopicId(String topicId);

    /**
     * 订单产品列表
     * @param dateUnit
     * @return
     */
    List<FinanceIndexOrderProductVO> financeIndexOrderProductList(Integer dateUnit,String companyId);

    /**
     * 根据产品编码查询产品信息
     * @Author pym
     * @Date  2021/8/16 16:35
     * @param productCode 产品编码
     * @return {@link {com.crm.model.entity.productManager.CustomerProduct}}
     */
    CustomerProduct selectCustomerProductByCode(String productCode);

    /**
     * 根据idList查询产品名称
     * @param productIdList
     * @return
     */
    List<Map<String,String>> selectProductByIdList(List<Map<String,String>> productIdList);

    /**
     * 查询非会员上架产品
     * @Author pym
     * @Date  2021/12/29 17:00
     * @param
     * @return {@link {java.util.List<com.crm.model.vo.productManager.ProductVO>}}
     */
    List<ProductVO> selectNonMemberShelfProductList();
}
